<?php
header("Content-Type: text/html; charset=UTF-8");
//生成大写字母
function rand_str($i){
    $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $finalStr = array();
    for($j=0;$j<$i;$j++) {
        $strTemp = substr($str,rand(0,strlen($str)-1),1);
        $finalStrArray[$j] = $strTemp;
        $str = str_replace($strTemp, "", $str);
    }
    sort($finalStrArray);
    $arrstr = $finalStrArray;
    $$strstr="";
    for($h=0;$h<$i;$h++){
    	$strstr .= $arrstr[$h];
    }
    return $strstr;
}

//生成数字
function rand_num($num){
	$array   =   array(0,1,2,3,4,5,6,7,8,9);
	$key   =   array_rand($array,$num);
	$str   =   "";
	for($i=0;$i <$num;$i++){
		$str .=$array[$key[$i]];
	}
	return $str;
}

//生成随机横坐标
$rand_str = rand_str(10);
$arr   = array();
for($k=0;$k<strlen($rand_str);$k++){
	for ($i = 1;$i < 9;$i++){
		$rand = rand_num(3);
		//赋给所有code的容器
		$arr[$rand_str{$k} . $i] =  $rand;
	}
}

$code   = serialize($arr); //序列化后将信息入库
$letter   = $rand_str;

function show(){
	global $code,$letter;
		$codes = unserialize($code);
		//图片初始值
		$bit = 3;  //密保卡位数
		$height = 332;    //图片高度
		$width =  626;    //图片宽度
		$im = imagecreatetruecolor($width,$height);
		$linecolor = imagecolorallocate($im, 229,229,229);
		$fontcolor = imagecolorallocate($im, 0, 0, 0);
		$top_rectangle_color = imagecolorallocate($im,241,254,237);
		$top_letter_color = imagecolorallocate($im,54,126,76);
		$left_rectangle_color = imagecolorallocate($im,243,247,255);
		$left_num_color = imagecolorallocate($im,4,68,192);
		$logo_str_color = imagecolorallocate($im,0,0,0);
		imagefill($im,0,0,imagecolorallocate($im,255,255,255));  //图片背景色
		$font    = 'arial.ttf';  //字体
		$font_en = 'candarab.ttf'; //英文字体
		$font2   = 'simhei.ttf'; //密保卡上方黑体
		//$dst = imagecreatefromjpeg("13135703499487.jpg");

		//imagecopymerge($im,$dst,120,15,0,0,193,55,100);
		imageline($im,10,72,$width-10,72,$linecolor);
		$ltext = "电子密保卡";

		if(!imagettftext($im,10,0,270,47,$logo_str_color,$font2,$ltext)) {
			exit('error');
		}

		//写入卡号
		$b = '1000'.rand_num(10);
		for($i=0;$i<7;$i++){
			$p.= substr($b,3*$i,4). ' ';
		}

		$x = 40; $y = 95; //序列号位置
		imagettftext($im,10,0,$x,$y,$color,$font2,'序列号：');
		imagettftext($im,11,0,$x+50,$y,$color,$font_en,$p);
		//颜色框
		imagefilledrectangle($im,10,106,$width-10,128,$top_rectangle_color);
		imagefilledrectangle($im,10,129,65,$height-10,$left_rectangle_color);
		//写入最上排英文字母及竖线
		for($i=1;$i<=10;$i++){
			$x = $i*55+35;
			 $y = 123;
			  $float_size = 11;   //字母位置参数
			imagettftext($im,$float_size,0,$x,$y,$top_letter_color,$font_en,$letter{$i-1});//写入最上排英文字母
		}

		for($i=0;$i<=9;$i++){

			$linex = $i*55+65;    $liney = 105;    $liney2 = $height-10;  //竖线位置参数

			imageline($im,$linex,$liney,$linex,$liney2,$linecolor);//划入竖线

		}

		//写入竖排数字及填入矩阵数据 划横线

		for($j=0;$j<8;$j++){

			$jj=$j+1;

			$x=35;  $y=($jj*24)+123; //左排数字及横线位置参数

			imagettftext($im, $float_size, 0, $x, $y, $left_num_color, $font_en, $jj);//写入左排数字

			for($i=1;$i<=10;$i++){

				$float_size2=11;  $x = $i*55+27;  $sy=$y;  //填入矩阵数据位置参数

				$s = $letter{$i-1};
				$s .= $j + 1;
				imagettftext($im,$float_size2,0,$x,$sy,$fontcolor,$font_en,$codes[$s]);//写入矩阵数据

			}
		}

		for($j=0;$j<10;$j++){

			$line_x=10; $line_x2=$width-10;$y=$j*24+105; //横线位置参数 y坐标数据同上

			imageline($im,$line_x,$y,$line_x2,$y,$linecolor);//划入横线

		}

		//外框边线

		imageline($im,10,10,$width-10,10,$linecolor);//横线

		//imageline($im,10,$height-10,$width-10,$height-10,$linecolor);

		imageline($im,10,10,10,$height-10,$linecolor);//竖线

		imageline($im,$width-10,10,$width-10,$height-10,$linecolor);

		//生成图片

		ob_clean();
		header("Content-type: image/jpeg");
		imagejpeg($im,null,100);
		imagedestroy($im);
	}
show();

?>
